
//------------------函数类型的兼容性，参数个数不同，参数少的函数可以赋值给参数多的函数------------------
type F1=(a:number) => number;
type F2 = (a: number, b: string) => number;
let f1:F1=(a:number)=>{return a}
let f2:F2=f1;//F1类型的函数可以赋值给F2类型的函数，因为F2类型的函数比F1类型的函数多了一个参数b，所以F2类型的函数可以赋值给F1类型的函数
console.log(f1(1))
console.log(f2(1,'2'))
//------------------函数类型的兼容性，参数个数相同，参数类型相同，返回值类型相同，所以F3类型的函数可以赋值给F2类型的函数------------------
type F3 = (a: number, b: string) => number;
let ff2:F2=(a:number,b:string)=>{
    console.log(a,b);
    return a
}
let f3:F3=ff2;//参数个数相同，参数类型相同，返回值类型相同，所以F3类型的函数可以赋值给F2类型的函数
console.log(f3(1,'2'))
//------------------函数类型的兼容性，参数个数相同，参数类型相同，返回值类型不同，所以F4类型的函数不能赋值给F2类型的函数------------------
// type F4 = (a: number, b: string) => string;
// type F5 = (a: number, b: number) => number;
// let f4:F4=(a:number,b:string)=>{return a.toString()}
// let f5:F5=(a:number,b:number)=>{return a}
// f4(1,'2')//'12'
// f5(1,2)//1